package com.clouddot.baipai.http;


import com.clouddot.baipai.http.entity.response.addEvaluateResponse;
import com.clouddot.baipai.http.entity.response.applyLeaveResponse;
import com.clouddot.baipai.http.entity.response.bindBanPaiResponse;
import com.clouddot.baipai.http.entity.response.getAllClassResponse;
import com.clouddot.baipai.http.entity.response.getAllWeekResponse;
import com.clouddot.baipai.http.entity.response.getArcticByIdResponse;
import com.clouddot.baipai.http.entity.response.getArcticListResponse;
import com.clouddot.baipai.http.entity.response.getBanPaiModelResponse;
import com.clouddot.baipai.http.entity.response.getClassHonorResponse;
import com.clouddot.baipai.http.entity.response.getClassInfoByIdResponse;
import com.clouddot.baipai.http.entity.response.getClassInfoListResponse;
import com.clouddot.baipai.http.entity.response.getClassInfoResponse;
import com.clouddot.baipai.http.entity.response.getClassMemberResponse;
import com.clouddot.baipai.http.entity.response.getClassRecordResponse;
import com.clouddot.baipai.http.entity.response.getCommitteeResponse;
import com.clouddot.baipai.http.entity.response.getCourseByIdResponse;
import com.clouddot.baipai.http.entity.response.getCourseListResponse;
import com.clouddot.baipai.http.entity.response.getCurrentCourseResponse;
import com.clouddot.baipai.http.entity.response.getEvaluateByDayResponse;
import com.clouddot.baipai.http.entity.response.getEvaluateByWeekResponse;
import com.clouddot.baipai.http.entity.response.getIndexListResponse;
import com.clouddot.baipai.http.entity.response.getLeaveRecordResponse;
import com.clouddot.baipai.http.entity.response.getLeaveTypeResponse;
import com.clouddot.baipai.http.entity.response.getPersonInfoResponse;
import com.clouddot.baipai.http.entity.response.getRecordByIdResponse;
import com.clouddot.baipai.http.entity.response.getSchoolInfoResponse;
import com.clouddot.baipai.http.entity.response.loginResponse;

import java.util.ArrayList;

import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;


/**
 * Created by wxy on 2018/08/26.
 *
 * @author wxy
 * @fileName IBanPaiApi
 * @date on 2018/08/26 10:31
 */


public interface IBanPaiApi {
    /**
     * 获取学校信息
     *
     * @param host    ip地址
     * @param acttype GetCmsByTitle
     * @param title   类型：学校简介，环境，信息，考勤
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getSchoolInfoResponse> getScholInfo(@Query("host") String host, @Query("acttype") String acttype, @Query("title") String title);

    /**
     * 获取新闻列表
     *
     * @param host      IP地址
     * @param acttype   QueryCmsPage
     * @param newstype  类型 ：XXXW，代表学校新闻；
     *                  TZGG，代表通知公告；
     *                  JJTZ，代表紧急通知；
     *                  FOOD，代表一周菜谱；
     *                  ClassCardHome，代表图片轮番；
     * @param pageindex 第几页
     * @param pagesize  几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getArcticListResponse> getArcticeInfo(@Query("host") String host, @Query("acttype") String acttype, @Query("newstype") String newstype, @Query("pageindex") int pageindex, @Query("pagesize") int pagesize);

    /**
     * 获取新闻列表的详细内容
     *
     * @param host    IP地址
     * @param acttype GetCmsById
     * @param id      新闻Item对应的ID
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getArcticByIdResponse> getArcticById(@Query("host") String host, @Query("acttype") String acttype, @Query("id") String id);

    /**
     * 获取班级列表的详细内容
     *
     * @param host    IP地址
     * @param acttype QueryTaskDetail
     * @param id      班级信息Item对应的ID
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getClassInfoByIdResponse> getClassInfoById(@Query("host") String host, @Query("acttype") String acttype, @Query("id") String id);

    /**
     * 获取班级信息列表
     *
     * @param host      ip地址
     * @param acttype   QueryTaskCardPage
     * @param TaskType  取值为notice，代表班级通知；
     *                  取值为activity，代表班级活动；
     *                  取值为image：图片库
     * @param ClassId   班级的ID
     * @param pageindex 第几页
     * @param pagesize  几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getClassInfoListResponse> getClassInfo(@Query("host") String host, @Query("acttype") String acttype, @Query("TaskType") String TaskType, @Query("ClassId") String ClassId, @Query("pageindex") int pageindex, @Query("pagesize") int pagesize);

    /**
     * 获取当前上课的课程
     *
     * @param host    IP地址
     * @param acttype QueryCurrentClassTeacher
     * @param ClassId 班级ID
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getCurrentCourseResponse> getCurrentCourse(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId);

    /**
     * 获取班级的详细信息
     *
     * @param host      IP地址
     * @param acttype   GetClassInfo
     * @param carddevid 班牌设备对应的 wifi Mac 物理地址
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getClassInfoResponse> getClassInfo(@Query("host") String host, @Query("acttype") String acttype, @Query("carddevid") String carddevid);

    /**
     * 获取班级全部人员列表
     *
     * @param host      IP地址
     * @param acttype   QueryForStudentPage
     * @param ClassId   班级ID
     * @param pageindex 第一页
     * @param pagesize  几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getClassMemberResponse> getClassMemberList(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId, @Query("pageindex") int pageindex, @Query("pagesize") int pagesize);

    /**
     * 获取学生个人的考勤记录
     *
     * @param host      IP地址
     * @param acttype   QueryForCardRecordPage
     * @param pageindex 第一页
     * @param pagesize  几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getRecordByIdResponse> getStudentAttendRecord(@Query("host") String host, @Query("acttype") String acttype, @Query("pageindex") int pageindex, @Query("pagesize") int pagesize);

    /**
     * 获取班级全部人员的考勤情况
     *
     * @param host    IP地址
     * @param acttype QueryClassCardCount
     * @param ClassId 班级ID
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<ArrayList<getClassRecordResponse>> getClassAttendRecord(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId);

    /**
     * 获取班级的荣誉记录
     *
     * @param host      IP地址
     * @param acttype   QueryForClassHonorPage
     * @param ClassId   班级ID
     * @param pageindex 第一页
     * @param pagesize  几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getClassHonorResponse> getClassHonorList(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId, @Query("pageindex") int pageindex, @Query("pagesize") int pagesize);

    /**
     * 获取全部班级
     *
     * @param host    IP地址
     * @param acttype QueryClassList
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<ArrayList<getAllClassResponse>> getAllClassList(@Query("host") String host, @Query("acttype") String acttype);

    /**
     * 设备绑定班级
     *
     * @param host         IP地址
     * @param acttype      ClassBind
     * @param ClassId      班级ID
     * @param CardDeviceId 班牌设备对应的 wifi Mac 物理地址
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<bindBanPaiResponse> bindBanPai(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId, @Query("CardDeviceId") String CardDeviceId);

    /**
     * 获取班牌显示的模式
     *
     * @param host      IP地址
     * @param acttype   GetSysParamValue
     * @param paramname ClassCardParam
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getBanPaiModelResponse> getBanPaiModel(@Query("host") String host, @Query("acttype") String acttype, @Query("paramname") String paramname);

    /**
     * 获取请假类型
     *
     * @param host    IP地址
     * @param acttype LeaveDetail
     * @param id      无需填写
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getLeaveTypeResponse> getLeaveType(@Query("host") String host, @Query("acttype") String acttype, @Query("id") String id);

    /**
     * 获取学生的考勤记录 ，必须在登录之后才有效
     *
     * @param host      IP地址
     * @param acttype   QueryStudentLeavePage
     * @param pageindex 第几页
     * @param pagesize  几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getLeaveRecordResponse> getLeaveRecord(@Query("host") String host, @Query("acttype") String acttype, @Query("pageindex") int pageindex, @Query("pagesize") int pagesize);

    /**
     * 请假 ,必须在登录之后才有效
     *
     * @param host          IP地址
     * @param acttype       LeaveAdd
     * @param LeaveType     请假类型的ID
     * @param LeaveTypeText 请假类型的文字
     * @param LeaveStart    请假开始时间
     * @param LeaveEnd      结束时间
     * @param LeaveReason   请假理由
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<applyLeaveResponse> applyLeave(@Query("host") String host, @Query("acttype") String acttype, @Query("LeaveType") String LeaveType, @Query("LeaveTypeText") String LeaveTypeText, @Query("LeaveStart") String LeaveStart, @Query("LeaveEnd") String LeaveEnd, @Query("LeaveReason") String LeaveReason);

    /**
     * 获取学生作业的课程列表
     *
     * @param host      IP地址
     * @param acttype   QueryStudentCourse
     * @param StudentId 学生的ID
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<ArrayList<getCourseListResponse>> getCourseListByStudentId(@Query("host") String host, @Query("acttype") String acttype, @Query("StudentId") String StudentId);

    /**
     * 获取班级作业课程列表
     *
     * @param host    IP地址
     * @param acttype QueryStudentCourse
     * @param ClassId 班级ID
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<ArrayList<getCourseListResponse>> getCourseListByClassId(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId);

    /**
     * 获取作业的内容
     *
     * @param host            IP地址
     * @param acttype         QueryStudentJobPage
     * @param TeachingClassId 课程教学的老师ID
     * @param pageindex       第几页
     * @param pagesize        几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getCourseByIdResponse> getCourseHomeWorkById(@Query("host") String host, @Query("acttype") String acttype, @Query("TeachingClassId") String TeachingClassId, @Query("pageindex") int pageindex, @Query("pagesize") int pagesize);

    /**
     * 刷卡登录
     *
     * @param host    IP地址
     * @param acttype CardLogin
     * @param code    刷卡卡号
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<loginResponse> login(@Query("host") String host, @Query("acttype") String acttype, @Query("code") String code);

    /**
     * @param host     IP地址
     * @param acttype  CardLogin
     * @param code     刷卡卡号
     * @param filepath 上传图片的路径
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<loginResponse> loginByPhoto(@Query("host") String host, @Query("acttype") String acttype, @Query("code") String code, @Query("filepath") String filepath);

    /**
     * 获取学生的详细信息，必须在登录之后才有效
     *
     * @param host    IP地址
     * @param acttype GetLoginInfo
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getPersonInfoResponse> getPersonInfo(@Query("host") String host, @Query("acttype") String acttype);

    /**
     * 获取大队委
     *
     * @param host IP地址
     * @param acttype QueryClassValUser
     * @param ClassId 班级ID
     * @param code 刷卡卡号
     * @return
     */

    @GET("MobileAction.msjs")
    Observable<ArrayList<getCommitteeResponse>> getCommittee(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId, @Query("code") String  code);

    /**
     * 班级评价添加
     * @param host IP地址
     * @param acttype ClassValAdd
     * @param ClassId 班级ID
     * @param ObjectId 指标ID
     * @param ValType 指标类型
     * @param UserId 评价用户的ID
     * @param WeekId 当前周
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<addEvaluateResponse> addEvaluate(@Query("host") String host, @Query("acttype") String acttype, @Query("ClassId") String ClassId,@Query("ObjectId")String ObjectId, @Query("ValType")String ValType, @Query("UserId")String UserId, @Query("WeekId")String WeekId ,@Query("SetValue")String SetValue);

    /**
     *
     * 获取评价指标列表
     * @param host IP地址
     * @param acttype QueryForClassValObject
     * @param ObjectType 指标类型 class
     * @param pageindex 第几页
     * @param pagesize 几条记录
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<getIndexListResponse> getIndexList(@Query("host") String host, @Query("acttype") String acttype, @Query("ObjectType") String ObjectType,@Query("pageindex")int pageindex, @Query("pagesize")int pagesize);

    /**
     *
     * 获取全部周期
     * @param host IP地址
     * @param acttype AllWeekRecord
     * @return
     */

    @GET("MobileAction.msjs")
    Observable<getAllWeekResponse> getAllWeek(@Query("host") String host, @Query("acttype") String acttype);


    /**
     *
     *
     * @param host
     * @param acttype ClassValDetail
     * @param ObjectType
     * @param ClassId
     * @param CurDate
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<ArrayList<getEvaluateByDayResponse>> getEvaluateByDay(@Query("host") String host, @Query("acttype") String acttype, @Query("ObjectType") String ObjectType, @Query("ClassId") String  ClassId ,@Query("CurDate") String  CurDate);

    /**
     *
     *
     * @param host
     * @param acttype ClassValCount
     * @param ObjectType
     * @param ClassId
     * @param WeekId
     * @return
     */
    @GET("MobileAction.msjs")
    Observable<ArrayList<getEvaluateByWeekResponse>> getEvaluateByWeek(@Query("host") String host, @Query("acttype") String acttype, @Query("ObjectType") String ObjectType, @Query("ClassId") String  ClassId , @Query("WeekId") String  WeekId);
}
